require_relative "spaceship_patch"

default_platform(:mac)

ENV["FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT"] = "120"

lane :package do
  xcodegen

  # Config is controlled via env vars
  app_store_connect_api_key(
    is_key_content_base64: true,
  )

  create_keychain(
    name: "xtool.keychain",
    password: "",
    unlock: true,
  )

  unlock_keychain(
    path: "xtool.keychain",
    password: "",
  )

  Tempfile.create(["Identity", ".p12"]) do |file|
    file.write(Base64.decode64(ENV["IDENTITY_P12"]))
    file.close
    import_certificate(
      certificate_path: file.path,
      keychain_name: "xtool.keychain",
      keychain_password: "",
    )
  end

  sigh(
    platform: "macos",
    output_path: "./Build/Signing",
    force: true,
    developer_id: true,
  )

  update_code_signing_settings(
    use_automatic_signing: false,
    team_id: ENV["DEVELOPMENT_TEAM"],
    code_sign_identity: "Developer ID Application",
    profile_name: lane_context[SharedValues::SIGH_NAME],
  )

  gym(
    export_method: "developer-id",
    output_directory: "./Build/Output",
  )

  notarize(
    package: "./Build/Output/xtool.app",
  )

  # we need to re-package after notarization and stapling.
  # we have to use `ditto --sequesterRsrc` rather than zip
  # because the default strategy stores resource forks as
  # ._Foo but codesigning doesn't like that, and instead
  # wants them in __MACOSX.
  sh(
    "ditto", "-c", "-k", "--keepParent", "--sequesterRsrc",
    "../Build/Output/xtool.app", "../Build/Output/xtool.app.zip",
  )
end
